package com.gientech.sys.custom;

import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gientech.common.exception.AppException;
import com.gientech.common.util.MyBeanUtil;
import com.gientech.common.util.MyStringUtil;
import com.gientech.common.view.DataGrid;
import com.gientech.core.base.BaseService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Slf4j
@Service
@Transactional
public class SysCustomService extends BaseService<SysCustomMapper , SysCustom> {
    public DataGrid<SysCustomVO> listCustom(SysCustomDTO4List dto) {
        log.info("【查询条件--客户】" + dto);

        // 【1】 处理模糊查询条件的like(有3个方法addObjectLike，addObjectLikeLeft，addObjectLikeRight)
        MyStringUtil.addObjectLike(dto, "custId,custName,mobile,sex");

        // 【2】处理前端传入排序条件
        dto.setOrderBy(MyStringUtil.getOrderBy(dto.getSort(), dto.getOrder(), "a.CUST_ID asc"));
        // 【3】构造分页参数
        Page<SysCustomVO> page = new Page<>(dto.getPageNo(), dto.getPageSize());
        return new DataGrid<SysCustomVO>(this.getBaseMapper().getSysCustomList(page, dto), page.getTotal());
    }

    /**
     * 【2】新增--保存
     *
     * @param dto
     */
    public void saveCustom(SysCustomDTO4Save dto) {
        log.info("【新增--时间参数】" + dto);

        // 【1】 从dto中copy属性
        SysCustom sysCustom = new SysCustom();
        MyBeanUtil.copyPropertiesIgnoreNull(dto, sysCustom);

        // 【2】 校验id是否存在
        if (isExistCustomId(sysCustom.getCustId())) {
            throw new AppException("新增失败，用户ID【" + sysCustom.getCustId() + "】已经存在！");
        }

        this.save(sysCustom);
    }

    /************* 【上面代码是基本的CRUD功能，新增的方法放在下面！Private方法放最底下】 *********************************************************************************************/

    /**
     * 【21】检查remindTempId是否存在
     *
     * @param custId
     * @return
     */
    private boolean isExistCustomId(String custId) {
        return this.getById(custId) != null;
    }

    /**
     * 【3】修改
     *
     * @param dto
     */
    public void updateCustom(SysCustomDTO4Update dto) {
        log.info("【修改--事件参数】" + dto);

        // 【1】 从dto中copy属性
        SysCustom sysCustom = new SysCustom();
        MyBeanUtil.copyPropertiesIgnoreNull(dto, sysCustom);

        if (!this.updateById(sysCustom)) {
            throw new AppException("操作失败，你修改的数据不是最新的，请刷新后重新操作！");
        }
    }


    /**
     * 【4】删除--多个id以逗号分隔
     *
     * @param customIds
     */
    public void deleteCustom(String customIds) {
        log.info("【删除--用户】" + customIds);
        // 【1】删除
        String[] CustomIdArray = StrUtil.splitToArray(customIds, ",");
        for (String CustomId : CustomIdArray) {
            this.removeById(CustomId);
        }
    }
}
